perm filename JOYM[F8,ALS] blob sn#307783 filedate 1977-10-01 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	*****************
C00016 ENDMK
C⊗;
*****************
*DECLARATIONS****
*****************
VX	EQU	H'0'
VY	EQU	H'2'
X	EQU	H'0'
Y	EQU	HU
*****************
CON	DCI	COL0	DCO TO COLOR UP FLAG
	CLR		CLEAR ACC
	XM		OR IN W/STATUS
	BM	CON1	BLACK AT TOP
	LR	A,Y	NO. GET Y COORD
	COM
	INC
	AI	H'7'
	LR	Y,A	Y←7-Y
	LR	A,X	GET X COORD
	COM
	INC
	AI	H'7'	X←7-X
CON1	DCI	JSAV	DCO TO ENCODED JOYSTICK
	LR	A,Y
	SR	1
	ST		BYTE#←(1/2)*Y
	LIS	H'1'
	NS	X
	LIS	H'8'
	BZ	CON2	X ODD?
	SL	4	YES.
CON2	LR	Y,A	SAVE RESULT IN Y
	LR	A,X	GET X COORDINATE
	SR	1
	LR	X,A	CUT X IN HALF
	LR	A,Y	AND RECOVER BYTE
	BZ	CON4	DONE?
CON3	SR	1	NO, SHIFT BIT OVER
	DS	X	DECREMENT COUNT
	BNZ	CON3	DONE YET?
CON4	ST		YES,STORE RESULT
	POP		AND RETURN
****************************************
*CURS***JOYSTICK READ AND MOVE DURING***
********READ****************************
*USES K,DCO,DC1,HU,REGS 0,1,2.**********
****************************************
CURS	LR	K,P	SAVE RETURN ADDRESS
	PI	PUSH	PUSH IT ON TO STACK
	PI	DAI	DISABLE INTERRUPT DRIVEN UDATE
MAP2	PI	WAUD	WAIT, THEN UPDATE
	LIS	H'8'
MAP3	DCI	H'8FB'	DCO TO CURRENT Y LO
	CM
	BNZ	MAP3	TO START OF DISPLAY
	LIS	H'1'	YES. CAN START JOYREAD
	LR	HU,A	SET FOR HORIZONTAL POT
	PI	JOYI	GET JOYSTICK INPUT
	LR	VX,A	SAVE IN VX
	LIS	H'0'
	LR	HU,A	SET FOR VERTICAL POT
	LR	0,A	SAVE IN REGISTER 0
	PI	AMAP	CONVERT VERTICAL READING
	LR	VY,A	SET IN VY
	LR	A,VX
	LR	0,A
	PI	AMAP	CONVERT HORIZONTAL READING
	LR	VX,A	AND SAVE SAME
	DCI	JPSV	DCO TO SAVE OF LAST POSIT(0-7 COORD)
	LM
	LR	X,A
	LM
	LR	Y,A	SET X & Y FROM OLD READING
	LIS	H'8'
	LR	3,A	SET COUNTER
MAP4	LR	A,X	GET X COORD
	AS	VX	ADD VX TO GET "NEW" POSITION
	BP	MAP5	OFF LHS?
	LIS	H'0'	YES, RESET
	BR	MAP6
MAP5	CI	H'7'
	BC	MAP6	OFF RHS?
	LIS	H'7'	YES, RESET
MAP6	LR	X,A	SET NEW X COORD
	LR	A,Y	GET Y COORD
	AS	VY	ADD VY FOR "NEW" POSITION
	BP	MAP7	OFF THE TOP?
	LIS	H'0'	YES, RESET TO TOP
	BR	MAP8
MAP7	CI	H'7'
	BC	MAP8	OFF THE BOTTOM?
	LIS	H'7'	YES, RESET
MAP8	LR	Y,A	SET NEW Y VALUE
	AS	X	ADD X COORD
	NI	H'1'
	BNZ	MAP9	LEGAL SQAURE?
	DS	3	NO, DECREMNT COUNTER
	BNZ	MAP4	TRIED TWICE?
	BR	MP12	YES, LEAVE CURSOR ALONE
MAP9	PI	MVC	DELETE OLD POSITION
	DCI	JPSV
	LR	A,X
	ST
	LR	A,Y
	ST		RESET POSITION
	PI	MVC	AND DISPLAY IT
MP12	LI	H'1E'
	LR	3,A	SET TIMER COUNT
MP10	CLR		CLEAR ACC
	OUTS	1	CLEAR TO PORT 1
	NOP		NOPS FOR FCC
	NOP		REASONS.
	NOP		DO NOT REMOVE!!!
	INS	1
	NI	H'1'
	BNZ	MP11	BUTTON PRESSED?
	PI	WAUD	NO, WAT THEN UPDATE
	DS	3	DECREMENT COUNTER
	BNZ	MP10	WAITED LONG ENOUGH?
	BR	MAP2	YES, CHECK JOYSTICK AGAIN
MP11	PI	CONV	BUTTON PRESSED SO, CONVERT
	DCI	JSAV	DCO TO JOYSTICK CONVERTED VALS
	LM
	LR	4,A	BYTE NUMBER IN R4
	LM
	LR	3,A	BYTE IN R3
	DCI	JPSV	DCO TO 0-7 FORM OF COORDS
	LM		GET X COORD
	LR	1,A	STORE IN R1
	LM		GET Y COORD
	LR	2,A	STORE IN R2
	DCI	COL0	DCO TO COLOR
	CLR		CLEAR ACC
	XM		IN, W/STATUS
	BM	MP13	BLACK IS PLAYER?
	LR	A,2	YES
	COM
	INC
	AI	H'7'	Y←7-Y
	LR	2,A
	BR	MP14
MP13	LR	A,1	PLAYER RED
	COM
	INC
	AI	H'7'
	LR	1,A	X←7-X
MP14	PI	WAUD	WAIT, THEN UPDATE
	PI	ENIN	ENABLE INTERRUPTS
	PI	POPS	POP RETURN ADDRESS
	PK		AND RETURN
*******************************************
*MVC****SET CURSOR ON DISPLAY, OR REMOVE***
*******************************************
*USES REGISTERS 1, Q, DCO******************
*******************************************
MVC	LR	K,P	SAVE RETURN ADDRESS
	DCI	JPSV	DCO TO COORDINATE (0-7 FORM)
	LM
	LR	1,A	SAVE IN R1
	LM
	SL	1	ACC←2*Y
	DCI	TABL
	ADC		ADD OFFSET TO ADDR TABLE
	LM
	LR	QU,A
	LM
	LR	QL,A	SET BASE ADDRESS IN Q
	LR	DC,Q	AND INTO DCO
	LR	A,1	GET X COORD
	ADC		ADD OFFSET FOR SAME
	LIS	H'4'
	LR	1,A	SET COUNTER
	DCI	POIN	DCO TO CURSOR OBJ
MVC1	LM
	XDC
	LR	Q,DC
	XM
	LR	DC,Q
	ST
	LIS	H'7'	NEXT DESTINATION
	ADC		IN DCO
	XDC		AND SAVED IN DC1
	DS	1	DONE ALL?
	BNZ	MVC1
	PK		YES, RETURN
*******************************************
*AMAP***JOYSTICK MAPPING ROUTINE***********
*******************************************
*USES ACC, R0, AND W***********************
*******************************************
AMAP	LR	A,0	GET VALUE TO BE CONVERTED
	CI	H'40'
	BNC	AMP1	VAL LE H'40'?
	LI	H'FF'	YES, SET VELOCITY TO -1
	BR	AMP2
AMP1	CI	H'87'
	LIS	H'1'
	BNC	AMP2	VALUE GT H'87'?
	CLR		NO, SO VELOCITY IS 0
AMP2	POP
*******************************************
*WMC****WRITE MESSAGE, CHECKERS************
*******************************************
*MESSAGE NUMBER IN REGISTER 0**************
*******************************************
*USES R0, SP O'24', AND THOSE REGISTERS   *
*USED BY THE UPDATE ROUTINE               *
*******************************************
WMC	LR	K,P	SAVE RETURN ADDRESS
	PI	PUSH	PUSH ONTO STACK
	PI	DAI	DISABLE INTERRUPTS
	PI	WAUD	WAIT, THEN UPDATE
	DCI	WMCA	DCO TO MESSAGE ADDRESS START
	LR	A,0	GET MESSAGE NUMBER
	SL	1
	AS	0
	ADC		ADD 3XNUMBER TO DCO
	LISU	2
	LISL	4	SET ISAR TO O'24'
	LM
	LR	S,A	SET MESSAGE LENGTH
	LM
	LR	QU,A
	LM
	LR	QL,A	MESSAGE ADDRESS INTO Q
	DCI	LINE
        LI      H'50'
	ST		SET PROPER LINE NUMBER
	DCI	H'05EF'	DCO TO MESSAGE BUILD AREA
	LI	H'70'
	LR	0,A	SET COUNTER
	CLR		CLEAR ACC
WMC1	ST
	DS	0
	BNZ	WMC1	CLEAR TEXT AREA
	PI	WAUD	WAIT, THEN DO UPDATE
	DCI	H'872'
	LIS	H'2'
	ST		TURN OBJECT ON
	LR	DC,Q	SET ADDRESS INTO DCO
	PI	WMS	WRITE MESSAGE
	PI	WAUD	WAIT, THEN UPDATE
	PI	ENIN	ENABLE INTERRUPTS ONCE MORE
	PI	POPS	POP RETURN ADDRESS
	PK		AND RETURN
*******************
*DATA FOR WMC******
*******************
WMCA	DC	H'A'	YOUR MOVE!
	DC	YMRV:
	DC	YMRV.
	DC	H'A'	MUST JUMP
	DC	MJM:
	DC	MJM.
	DC	H'D'	ILLEGAL MOVE
	DC	MIM:
	DC	MIM.
	DC	H'8'	TOO FAR
	DC	TFM:
	DC	TFM.
	DC	H'10'	WRONG DIRECTION
	DC	WDM:
	DC	WDM.
	DC	H'10'	PIECE CANNOT MOVE
	DC	PCMM:
	DC	PCMM.
YRMV	DC	H'0513'	YO
	DC	H'0309'	UR
	DC	H'0'	SPACE
	DC	H'2913'	MO
	DC	H'2F0B'	VE
	DC	H'04'	!
MJM	DC	H'290B'	MU
	DC	H'2107'	ST
	DC	H'0'	SPACE
	DC	H'1703'	JU
	DC	H'2925'	MP
	DC	H'04'	!
MIM	DC	H'0127'	IL
	DC	H'270B'	LE
	DC	H'1B11'	GA
	DC	H'2700' L SPACE
	DC	H'2913' MO
	DC	H'2F0B'	VE
	DC	H'04'	!
TFM	DC	H'0713'	TO
	DC	H'1300'	O SPACE
	DC	H'1D11'	FA
	DC	H'0904'	R!
WDM	DC	H'0D09'	WR
	DC	H'132B'	ON
	DC	H'1B00'	G SPACE
	DC	H'1F01'	DI
	DC	H'090B'	RE
	DC	H'3107'	CT
	DC	H'0113'	IO
	DC	H'2B04'	N!
PCMM	DC	H'2501'	PI
	DC	H'3111'	EC
	DC	H'0B00'	E SPACE
	DC	H'3111'	CA
	DC	H'2B39'	N'
	DC	H'0700'	T SPACE
	DC	H'2913'	MO
	DC	H'2F0B'	VE
**********************************************
*DBUG***DEBUGGING AID ROUTINE.  NOT TO REMAIN*
********IN CHECKERS PROGRAM AFTER DEBUGGING  *
********COMPLETED*****************************
*DESTROYS THE CONTENTS OF Q REGISTERS*********
**********************************************
DBUG	LR	K,P	SAVE RETURN ADDRESS
	LR	Q,DC	SAVE DCO IN Q REGISTER
	DCI	H'1FB9'	DCO TO START OF SAVE AREA
	LR	QU,A
	ST
	LR	QL,A
	ST		SAVE OLD DCO
	XDC
	LR	Q,DC
	XDC
	LR	A,QU
	ST
	LR	A,QL
	ST		SAVE OLD DC1
	LR	A,9	GET J REGISTER
	ST		AND SAVE IT
	LR	J,W
	LR	A,9
	ST		AND SAVE STATUS
	LR	A,IS
	ST		NOW SAVE THE ISAR
	LI	H'40'
	LR	9,A	SET COUNTER
	CLR
	LR	IS,A	AND SET ISAR
DBG1	LR	A,S
	ST
	LR	A,IS
	INC
	LR	IS,A
	DS	9
	BNZ	DBG1	SAVED ALL OF SCRATCHPAD?
	PI	PUSH	YES, PUSH RETURN ADDRESS
	PI	DAI	AND DISABLE INTERRUPTS
	PI	WAUD	WAIT, THEN UPDATE
	DCI	H'820'
	LI	H'63'
	ST		DELTAX OBJ2←3
	DCI	H'FFC'
        LI 	DBDT:
	ST
	LI	DBDT.
	ST
	LI	DBDT:
	ST
	LI	DBDT.
	ST		RESET UPDATE DATA POINTERS
	DCI	H'872'
	LIS	H'2'
	ST		TURN OBJECT ON...
DBG2	PI	WAUD	WAIT, THEN UPDATE
	CLR
	OUTS	1	CLEAR PORT 1
	NOP		NOPS FOR FCC
	NOP		RELATED REASONS.
	NOP		DO NOT DELETE!!!
	INS	1
	NI	H'1'
	BZ	DBG2	BUTTON PRESSED
	DCI	H'872'	YES, TURN
	LI	H'82'	OBJECT 2 OFF
	ST
	DCI	H'820'
	LI	H'6F'
	ST		RESET OBJ 2 DELTA X
	DCI	H'FFC'
	LI	UDIT:
	ST
	LI	UDIT.
	ST
	LI	UDIT:
	ST
	LI	UDIT.
	ST		RESET UPDATE POINTERS
	PI	WAUD	DO ONE MORE UPDATE
	PI	ENIN	RE-ENABLE INTERRUPTS
	PI	POPS	POP RETURN ADDRESS
	PK		AND RETURN
************************
*DATA FOR DEBUG ROUTINE*
************************
DBDT	DC	H'30'	ROM LO
	DC	H'10'
	DC	DBGO.
	DC	H'8C'	ROM HO + COLOR
	DC	H'8F'
	DC	DBGO:+H'E0'
	DC	H'3C'	DELTA Y
	DC	H'14'
	DC	H'05'
************************
*DEBUG OBJECT FOR TEST *
************************
DBGO	DC	H'F772'
	DC	H'5E54'
	DC	H'4A50'
	DC	H'5672'
	DC	H'5654'
	DC	H'4A52'
	DC	H'F77B'
	DC	H'DE'